/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package vo;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.*;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import java.util.Date;

@Entity
@Table(name="Venda")
public class VendaVO implements Serializable {

    @Id
    @SequenceGenerator( name = "cod_venda", sequenceName = "cod_venda_seq",allocationSize = 1 )
    @GeneratedValue( strategy = GenerationType.SEQUENCE, generator="cod_venda")
    @Column(name="cod_venda", nullable = false)
    private int codVenda;
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="cod_pessoa", insertable=true, updatable=true)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.SAVE_UPDATE)
    private PessoaVO pessoa;
    @Column(name="data_venda")
    @Temporal(TemporalType.DATE)
    private Date dataVenda;
    @Column(name="forma_pagamento")
    private int formaPagamento;
    @Column(name="tipo_pagamento")
    private int tipoPagamento;
    @Column(name="numero_produtos")
    private int numeroProdutos;
    @Column(name="valor_total")
    private double valorTotal;
    @Column(name="ativo")
    private boolean ativo;

    @ManyToMany(fetch=FetchType.LAZY)
    @JoinTable(name="Item_venda", joinColumns={@JoinColumn(name="cod_venda")},inverseJoinColumns={@JoinColumn(name="cod_produto")})
    @Cascade(CascadeType.SAVE_UPDATE)
    private Collection<ProdutoVO> produtos;

    //Contrutor Vazio
    public VendaVO(){

    }

    //Contrutor com Parâmetros
    public VendaVO(int codVenda, PessoaVO pessoa, Date dataVenda, int formaPagamaneto, int tipoPagamento, int numeroItens, int valorTotal){
        this.setCodVenda(codVenda);
        this.setPessoa(pessoa);
        this.setDataVenda(dataVenda);
        this.setFormaPagamento(formaPagamento);
        this.setTipoPagamento(tipoPagamento);
        this.setNumeroProdutos(numeroProdutos);
        this.setValorTotal(valorTotal);
        this.ativo=true;
    }
    //Métodos Get() e Set()
    public boolean isAtivo() {
        return ativo;
    }

    public void setAtivo(boolean ativo) {
        this.ativo = ativo;
    }

    public Date getDataVenda() {
        return dataVenda;
    }

    public void setDataVenda(Date dataVenda) {
        this.dataVenda = dataVenda;
    }

    public int getFormaPagamento() {
        return formaPagamento;
    }

    public void setFormaPagamento(int formaPagamento) {
        this.formaPagamento = formaPagamento;
    }

    public int getNumeroProdutos() {
        return numeroProdutos;
    }

    public void setNumeroProdutos(int numeroProdutos) {
        this.numeroProdutos = numeroProdutos;
    }

    public PessoaVO getPessoa() {
        return pessoa;
    }

    public void setPessoa(PessoaVO pessoa) {
        this.pessoa = pessoa;
    }

    public int getTipoPagamento() {
        return tipoPagamento;
    }

    public void setTipoPagamento(int tipoPagamento) {
        this.tipoPagamento = tipoPagamento;
    }
    public int getCodVenda() {
        return codVenda;
    }

    public void setCodVenda(int codVenda) {
        this.codVenda = codVenda;
    }

    public double getValorTotal() {
        return valorTotal;
    }

    public void setValorTotal(double valorTotal) {
        this.valorTotal = valorTotal;
    }

    public Collection<ProdutoVO> getProdutos() {
        return produtos;
    }

    public void setProdutos(Collection<ProdutoVO> produtos) {
        this.produtos = produtos;
    }



}
